<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2020/12/1
 * Time: 15:31
 */
namespace app\appmsg\controller;

use app\common\helper\appmsg_helper;
use app\common\helper\emotion_helper;
use app\common\helper\setting_helper;
use app\common\model\Appmenu;
use app\common\model\Appmsg;
use app\common\widget\weixin\material_widget;
use think\App;
use think\facade\View;
use think\facade\Config;
use think\facade\Request;
use think\facade\Filesystem;
use app\admin\controller\AdminBase;

class Sync extends AdminBase
{
    /**
     * 同步素材到微信
     * @return string
     */
    public function sync_news()
    {
        if (!$this->user_id) {
            return ['info' =>'已掉线，请刷新页面后重新登录'];
        }

        $appmenu_key = setting_helper::get_setting_info('appmenu_key');
        if (!$appmenu_key) {
            return ['info' => '此处需要用到公众平台的appid与appsecret，请先去自定义菜单里做填入真实的appid与appsecret做菜单授权'];
        }

        $id = Request::request('id', 0);
        if (!$id) {
            return ['info' =>'请选择要上传的素材'];
        }

        $appmsg_info = _uri('appmsg', ['id'=>$id]);
        if (!$appmsg_info || $appmsg_info['status'] != 1) {
            return ['info' => '该素材不存在或已删除'];
        }

        // 注意：纯链接没内容的图文不能同步，关联图文不能同步

        // 不管单图文还是多图文，通过此函数返回一个二维数组
        $appmsg_list = appmsg_helper::get_appmsg_list($id, 0);
        if (!$appmsg_list) {
            return  ['info' =>'该素材不存在或已删除'];
        }


        $appmsg_media_id = '';
        // 如果该素材已上传过，上传前先做删除操作
        if ($appmsg_list[0]['media_id']) {

            // 多图文如果新增item，走编辑接口，会报{"errcode":40114,"errmsg":""}，微信无相关说明
            // 多图文也没有删除某一个item的接口
            // 所以有下面这个判断，单图文走编辑接口；多图文如果图文条数不变也走编辑接口，其它都走删除重新上传
            if (count($appmsg_list) != 1 && $appmsg_list[0]['sync_msg_num'] != count($appmsg_list)) {
                $flag =  (new material_widget())->permanent_del_media($appmsg_list[0]['media_id']);
                //an_dump('删除情况', $flag);
                // 如果删除成功，需要把本地图文中的media_id去掉，以免下次再次删除
                if ($flag == 'ok') {
                    Appmsg::update(array('media_id'=>''), ['id'=>$appmsg_list[0]['id']]);
                }

            } else {
                $appmsg_media_id = $appmsg_list[0]['media_id'];
            }
        }

        $post_data = array();
        foreach ($appmsg_list as $k=>$v) {
            //dump($content);
            //exit;

            if ($k != 1) {
                //continue;
            }

            // 如果内容中有含有图片，需要上传内容中的图片，走素材内容中图片特有的上传的接口
            $res = (new material_widget())->upload_weixin_img($v['content'], $id);

            if ($res['info'] != 'ok') {
                return $res['info'];
            }
            $content = $res['content'];

            // 处理内容中的视频
            $content = (new material_widget())->fix_content_video($content, $id);

            // 处理图文的封面，如果已上传过，并且没有再次做更改，则用之前的，否则重新上传
            if ($v['cover_media_id'] && $v['cover_is_change'] != 1) {
                $thumb_media_id = $v['cover_media_id'];

            } else {
                // 需要上传封面，走永久media上传的接口
                $cover_res = (new material_widget())->permanent_media_upload(array('type'=>'image', 'file_path'=>$v['cover']));
                if (!is_array($cover_res) || !isset($cover_res['media_id'])) {
                    return $cover_res;
                }
                $thumb_media_id = $cover_res['media_id'];
                Appmsg::update(array('cover_media_id'=>$thumb_media_id, 'cover_is_change'=>0), ['id'=>$v['id']]);
            }

            //dump($cover_res);

            // 拼装每条信息
            $per_info = array(
                'title'                 => $v['title'],
                'thumb_media_id'        => $thumb_media_id,
                'author'                => '',
                'digest'                => $v['intro'],
                'show_cover_pic'        => $v['show_cover'],
                'content'               => $content,
                'content_source_url'    => $v['source_url']
            );
            $post_data[] = $per_info;

            // ==============   编辑图文关键的地方   =================
            // 如果有图文的media_id，走编辑需单条单条的更改
            // ===================================================
            if ($appmsg_media_id) {
                //dump($per_info, $appmsg_media_id, $k);exit;
                $result = (new material_widget())->permanent_update_news($per_info, $appmsg_media_id, $k);
                //dump($per_info, $k, $result);
                if (!is_array($result)) {
                    return $result;
                }
            }
        }


        $update_info = array();

        // ==============   上传图文关键的地方   =================
        // 上传新的永久图文
        if (!$appmsg_media_id) {
            $result = (new material_widget())->permanent_upload_news($post_data);

            if (!is_array($result)) {
                return $result;
            }

            if (!isset($result['media_id']) || !$result['media_id']) {
                return json_encode($result);
            }

            // 上传成功后，更新图文素材的id
            $update_info['media_id'] = $result['media_id'];
        }

        $update_info['sync_time'] = date('Y-m-d H:i:s');
        $update_info['sync_msg_num'] = count($appmsg_list);

        // 上传成功后，更新图文素材的id、最近同步时间、及同步时此图文的数量
        Appmsg::update($update_info, ['id'=>$id]);

        return array('info'=>'ok', 'sync_time'=>$update_info['sync_time']);
    }
}